package main

import (
	"fmt"
	"math"
)

func main() {
	// 在 fmt.Println 调用开始前，两次对 pow 的调用均已执行并返回其各自的结果。
	fmt.Println(
		pow(3, 2, 10),
		pow(3, 3, 20),
	)
}

func pow(x, n, lim float64) float64 {
	// if 语句可以在条件表达式前执行一个简短语句。
	// 该语句声明的变量作用域仅在 if 之内。
	if v := math.Pow(x, n); v < lim {
		return v
	} else {
		// 在 if 的简短语句中声明的变量同样可以在对应的任何 else 块中使用。
		fmt.Println("%g >= %g", v, lim)
	}
	return lim
}

// 求平方根
func sqrt(x float64) float64 {
	z := 1.000

	for i := 0; i < 10; i++ {
		z -= (z*z - x) / (2 * z)
	}
	return z
}
